// #include <iostream>
// #include <string>
// using namespace std;

// // 根据中序遍历和后序遍历，返回先序遍历结果
// string getPreorder(string in, string post) {
//     if (in.empty()) {
//         return ""; // 空树，返回空字符串
//     }
    
//     // 后序遍历的最后一个字符是根节点
//     char root = post.back();
//     // 找到根节点在中序遍历中的位置
//     int rootPos = in.find(root);
    
//     // 划分左子树的中序和后序遍历
//     string leftIn = in.substr(0, rootPos);
//     string leftPost = post.substr(0, leftIn.size());
    
//     // 划分右子树的中序和后序遍历
//     string rightIn = in.substr(rootPos + 1);
//     string rightPost = post.substr(leftIn.size(), rightIn.size());
    
//     // 先序遍历：根 + 左子树先序 + 右子树先序
//     return root + getPreorder(leftIn, leftPost) + getPreorder(rightIn, rightPost);
// }

// int main() {
//     string inOrder, postOrder;
//     cin >> inOrder >> postOrder;
//     cout << getPreorder(inOrder, postOrder) << endl;
//     return 0;
// }
#include<iostream>

using namespace std;
string dfs(string in,string post)
{
    //递归出口
     if (in.empty()) 
     {
        return ""; // 空树，返回空字符串
    }
    char root=post[post.size()-1];
    size_t pos=in.find(root);//找到中序根节点位置，区分左右子树
    //递归处理把左子树中序后序和右子树中序后序处理
    string leftin=in.substr(0,pos);
    string leftpos=post.substr(0,leftin.size());

    string rightin=in.substr(pos+1);
    string rightpos=post.substr(leftin.size(),post.size()-1-leftpos.size());

    return root+dfs(leftin,leftpos)+(rightin,rightpos);
}
int main()
{
    string a,b;
    cin>>a>>b;
    cout<<dfs(a,b);
}